Next: Standard Regexps, Previous: Match Data, Up: Searching and Matching [Contents][Index]
If you want to find all matches for a regexp in part of the
buffer, and replace them, the best way is to write an explicit
loop using re-search-forward and
replace-match, like this:
(while (re-search-forward "foo[ \t]+bar" nil t) (replace-match "foobar"))
See Replacing
the Text that Matched, for a description of
replace-match.
However, replacing matches in a string is more complex, especially if you want to do it efficiently. So Emacs provides a function to do this.
This function copies string and searches it for
matches for regexp, and replaces them with
rep. It returns the modified copy. If
start is non-nil, the search for
matches starts at that index in string, so matches
starting before that index are not changed.
This function uses replace-match to do the
replacement, and it passes the optional arguments
fixedcase, literal and
subexp along to replace-match.
Instead of a string, rep can be a function. In
that case, replace-regexp-in-string calls
rep for each match, passing the text of the match
as its sole argument. It collects the value rep
returns and passes that to replace-match as the
replacement string. The match data at this point are the
result of matching regexp against a substring of
string.
If you want to write a command along the lines of
query-replace, you can use
perform-replace to do the work.
This function is the guts of query-replace
and related commands. It searches for occurrences of
from-string in the text between positions
start and end and replaces some or all
of them. If start is nil (or
omitted), point is used instead, and the end of the
buffer’s accessible portion is used for
end.
If query-flag is nil, it replaces
all occurrences; otherwise, it asks the user what to do about
each one.
If regexp-flag is non-nil, then
from-string is considered a regular expression;
otherwise, it must match literally. If
delimited-flag is non-nil, then only
replacements surrounded by word boundaries are
considered.
The argument replacements specifies what to replace occurrences with. If it is a string, that string is used. It can also be a list of strings, to be used in cyclic order.
If replacements is a cons cell,
(function . data),
this means to call function after each match to
get the replacement text. This function is called with two
arguments: data, and the number of replacements
already made.
If repeat-count is non-nil, it
should be an integer. Then it specifies how many times to use
each of the strings in the replacements list
before advancing cyclically to the next one.
If from-string contains upper-case letters,
then perform-replace binds
case-fold-search to nil, and it
uses the replacements without altering their
case.
Normally, the keymap query-replace-map
defines the possible user responses for queries. The argument
map, if non-nil, specifies a keymap
to use instead of query-replace-map.
This function uses one of two functions to search for the
next occurrence of from-string. These functions
are specified by the values of two variables:
replace-re-search-function and
replace-search-function. The former is called
when the argument regexp-flag is
non-nil, the latter when it is
nil.
This variable holds a special keymap that defines the
valid user responses for perform-replace and the
commands that use it, as well as y-or-n-p and
map-y-or-n-p. This map is unusual in two
ways:
read-key-sequence to
get the input; instead, they read a single event and look
it up “by hand”.Here are the meaningful bindings for
query-replace-map. Several of them are meaningful
only for query-replace and friends.
actDo take the action being considered—in other words, “yes”.
skipDo not take action for this question—in other words, “no”.
exitAnswer this question “no”, and give up on the entire series of questions, assuming that the answers will be “no”.
exit-prefixLike exit, but add the key that was pressed
to unread-command-events (see Event Input
Misc).
act-and-exitAnswer this question “yes”, and give up on the entire series of questions, assuming that subsequent answers will be “no”.
act-and-showAnswer this question “yes”, but show the results—don’t advance yet to the next question.
automaticAnswer this question and all subsequent questions in the series with “yes”, without further user interaction.
backupMove back to the previous place that a question was asked about.
editEnter a recursive edit to deal with this question—instead of any other action that would normally be taken.
edit-replacementEdit the replacement for this question in the minibuffer.
delete-and-editDelete the text being considered, then enter a recursive edit to replace it.
recenterscroll-upscroll-downscroll-other-windowscroll-other-window-downPerform the specified window scroll operation, then ask
the same question again. Only y-or-n-p and
related functions use this answer.
quitPerform a quit right away. Only y-or-n-p and
related functions use this answer.
helpDisplay some help, then ask again.
This variable holds a keymap that extends
query-replace-map by providing additional
keybindings that are useful in multi-buffer replacements. The
additional bindings are:
automatic-allAnswer this question and all subsequent questions in the series with “yes”, without further user interaction, for all remaining buffers.
exit-currentAnswer this question “no”, and give up on the entire series of questions for the current buffer. Continue to the next buffer in the sequence.
This variable specifies a function that
perform-replace calls to search for the next
string to replace. Its default value is
search-forward. Any other value should name a
function of 3 arguments: the first 3 arguments of
search-forward (see String Search).
This variable specifies a function that
perform-replace calls to search for the next
regexp to replace. Its default value is
re-search-forward. Any other value should name a
function of 3 arguments: the first 3 arguments of
re-search-forward (see Regexp Search).
Next: Standard Regexps, Previous: Match Data, Up: Searching and Matching [Contents][Index]